// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0

export X := Rectangle {
//       ><warning{':=' to declare a component is deprecated. The new syntax declare components with 'component MyComponent {'. Read the documentation for more info}

    lay := GridLayout {
        property<string> foo: "hello";
        Row {
            Text {
                text: lay.foo + parent.width;
//                                     >   <error{Element 'Row' does not have a property 'width'}
                colspan: 1 + 1;
                rowspan: 2;
            }
            Text {
                row: 3;
//                   ><error{The 'row' property cannot be used for elements inside a Row}
                col: -2;
//                   > <error{'col' must be a positive integer}
                rowspan: 2.2;
//                       >  <error{'rowspan' must be a positive integer}
                colspan: -1;
//                       > <error{'colspan' must be a positive integer}
                y: 0;
//                 ><error{The property 'y' cannot be set for elements placed in this layout, because the layout is already setting it}

                animate x { duration: 100ms; }
//                      ><error{The property 'x' cannot be set for elements placed in this layout, because the layout is already setting it}

                init => {
                    self.colspan = 45;
                }
            }
        }

        Row {
            Text {
                x: 12px;
//                 >   <error{The property 'x' cannot be set for elements placed in this layout, because the layout is already setting it}
            }}
        Text{
            row: 200000; // that's actually bigger than 65535
//               >     <error{'row' must be a positive integer}
            Rectangle { row: 3; }
//                           ><error{row used outside of a GridLayout's cell}
        }
    }

    lay2 := GridLayout {
        property<int> negative: -5;
        property<int> last_row: 4;
        Text {
            row: lay2.last_row;
            col: -lay2.negative; // check that a unary minus isn't necessary an error
        }
        Text {
//      >   <error{Cannot mix auto-numbering and runtime expressions for the 'col' property}
            row: 0; // mixing runtime expr and literal is ok
        }
    }

    lay3 := GridLayout {
        Text {
            row: lay2.last_row;
            col: lay2.last_row;
        }
        Text {
//      >   <error{Cannot mix auto-numbering and runtime expressions for the 'row' property}
            col: 1;
        }
    }

    Text { colspan: 3; }
//                  ><error{colspan used outside of a GridLayout's cell}
    col: 3;
//       ><error{col used outside of a GridLayout's cell}

    HorizontalLayout {
        col: 3;
//           ><error{col used outside of a GridLayout's cell}
    }
}
